// 数字转中文金额工具函数
export function numberToChinese(num, priceUnit = 0) {
    // 限制范围：0到999999999
    if (num < 0 || num > 999999999) return '超出范围';
    
    // 定义中文数字和单位
    const digits = ['零', '一', '二', '三', '四', '五', '六', '七', '八', '九'];
    const units = ['', '十', '百', '千']; // 个级单位
    const bigUnits = ['', '万', '亿']; // 大单位：个、万、亿
    
    // 处理0的情况
    if (num === 0) {
        return priceUnit === 0 ? '零两整' : '零元整';
    }
    
    // 转换为整数并补零到9位（亿级1位+万级4位+个级4位）
    const str = Math.floor(num).toString().padStart(9, '0');
    // 拆分三级：亿级(0-0)、万级(1-4)、个级(5-8)
    const levels = [
        str.slice(0, 1),    // 亿级
        str.slice(1, 5),    // 万级
        str.slice(5, 9)     // 个级
    ];
    
    let result = '';
    
    // 处理每一级
    levels.forEach((level, index) => {
        if (level === '0000' && index !== 0) return; // 跳过空的万级和个级
        
        let levelStr = '';
        // 处理当前级的每一位
        for (let i = 0; i < level.length; i++) {
            const digit = parseInt(level[i]);
            if (digit !== 0) {
                levelStr += digits[digit] + units[level.length - 1 - i];
            } else {
                // 只在非末尾且前一位不是零的情况下加零
                if (i !== level.length - 1 && levelStr[levelStr.length - 1] !== '零') {
                    levelStr += '零';
                }
            }
        }
        
        // 去除当前级末尾的零
        levelStr = levelStr.replace(/零+$/, '');
        
        // 如果当前级有内容，添加对应的大单位（万、亿）
        if (levelStr) {
            result += levelStr + bigUnits[2 - index];
        }
    });
    
    // 处理连续的零
    result = result.replace(/零+/g, '零');
    // 去除可能的开头或结尾零
    result = result.replace(/^零+|零+$/g, '');
    
    // 根据单位参数添加后缀
    return result + (priceUnit === 0 ? '两整' : '元整');
}

// 在Vue项目中全局注册
export function install(Vue) {
    // 注册为全局方法
    Vue.prototype.$numberToChinese = numberToChinese;
    
    // 注册为全局过滤器
    Vue.filter('numberToChinese', (num, priceUnit) => {
        return numberToChinese(num, priceUnit);
    });
}

// 默认导出
export default {
    install,
    numberToChinese
};
